/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.telsoft.hms.lib.security.core;

import java.util.logging.Level;
import java.util.logging.Logger;
import com.telsoft.hms.lib.security.exception.NotImplementedException;
import com.telsoft.hms.lib.security.lang.AbstractThreadDoLoopWork;

/**
 * @author HùngPV
 * thanbotbeo10@gmail.com, hungpv@telsoft.com.vn
 * Ngày tạo: 09/09/2014
 */

 // Thread này là thread chạy liên tục, cứ mỗi lần vòng lặp xảy ra
 // thì sẽ gọi phương thức kiểm tra session time out của SessionManager thông qua event SessionEventAdapter

public class ThreadCountdownCheckTimedout extends AbstractThreadDoLoopWork {

    private SessionEventAdapter ssEvent;

    public ThreadCountdownCheckTimedout(int interval) {
        this.interval = interval;
    }

    public void addEventListener(SessionEventAdapter ssEvent) {
        this.ssEvent = ssEvent;
    }

    @Override
    public void doWork() {
        if (this.ssEvent != null) {
            try {
                this.ssEvent.onCheckingTimedOut();
            } catch(Exception ex){
                Logger.getLogger(ThreadCountdownCheckTimedout.class.getName()).log(Level.SEVERE, null, ex);
            }catch (ThreadDeath e) {
                try {
                    this.ssEvent.threadCheckTimedOutWasDead();
                } catch (NotImplementedException ex) {
                    Logger.getLogger(ThreadCountdownCheckTimedout.class.getName()).log(Level.SEVERE, null, ex);
                    throw e;
                }
            }catch(Error e){
                Logger.getLogger(ThreadCountdownCheckTimedout.class.getName()).log(Level.SEVERE, null, e);
                throw e;
            }
        }
    }
}
